package concursos.modelos;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Concurso implements Serializable {

	private static final long serialVersionUID = 1527348066022114710L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;
	private String nome;
	private Date inscricaoInicio;
	private Date inscricaoFim;
	private Date dataLiberacaoCartao;
	private String cargo;
	private String informacao;
	private String localProva;
	private String requisitosCargo;
	private int horasTrabalho;
	private boolean inscricaoPaga;

	private Date dataProva;
	private double salario;
	@Enumerated(EnumType.STRING)
	private NivelConcursoEnum nivel;

	@OneToMany(mappedBy = "concurso", cascade = CascadeType.ALL)
	private List<Lembrete> lembretes;
	@OneToMany(mappedBy = "concurso", cascade= CascadeType.ALL)
	private Set<Disciplina> disciplinas;
	@OneToMany(mappedBy = "concurso", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
	private List<Arquivo> arquivos;
	@ManyToOne
	private Usuario usuario;

	public int getId() {
		return this.id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Date getInscricaoInicio() {
		return this.inscricaoInicio;
	}

	public void setInscricaoInicio(Date inscricaoInicio) {
		this.inscricaoInicio = inscricaoInicio;
	}

	public Date getInscricaoFim() {
		return this.inscricaoFim;
	}

	public void setInscricaoFim(Date inscricaoFim) {
		this.inscricaoFim = inscricaoFim;
	}

	public Date getDataLiberacaoCartao() {
		return this.dataLiberacaoCartao;
	}

	public void setDataLiberacaoCartao(Date dataLiberacaoCartao) {
		this.dataLiberacaoCartao = dataLiberacaoCartao;
	}

	public String getCargo() {
		return this.cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public String getInformacao() {
		return this.informacao;
	}

	public void setInformacao(String informacao) {
		this.informacao = informacao;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Lembrete> getLembretes() {
		return this.lembretes;
	}

	public void setLembretes(List<Lembrete> lembretes) {
		this.lembretes = lembretes;
	}

	public Set<Disciplina> getDisciplinas() {
		return this.disciplinas;
	}

	public void setDisciplinas(Set<Disciplina> disciplinas) {
		this.disciplinas = disciplinas;
	}

	public List<Arquivo> getArquivos() {
		return this.arquivos;
	}

	public void setArquivos(List<Arquivo> arquivos) {
		this.arquivos = arquivos;
	}

	public Date getDataProva() {
		return this.dataProva;
	}

	public void setDataProva(Date dataProva) {
		this.dataProva = dataProva;
	}

	public double getSalario() {
		return this.salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public NivelConcursoEnum getNivel() {
		return this.nivel;
	}

	public void setNivel(NivelConcursoEnum nivel) {
		this.nivel = nivel;
	}

	@Override
	public String toString() {
		return this.nome;
	}

	
	public String getLocalProva() {
		return this.localProva;
	}

	public void setLocalProva(String localProva) {
		this.localProva = localProva;
	}

	public String getRequisitosCargo() {
		return this.requisitosCargo;
	}

	public void setRequisitosCargo(String requisitosCargo) {
		this.requisitosCargo = requisitosCargo;
	}

	public int getHorasTrabalho() {
		return this.horasTrabalho;
	}

	public void setHorasTrabalho(int horasTrabalho) {
		this.horasTrabalho = horasTrabalho;
	}

	public boolean isInscricaoPaga() {
		return this.inscricaoPaga;
	}

	public void setInscricaoPaga(boolean pago) {
		this.inscricaoPaga = pago;
	}

	
}
